package br.com.salao.ejb.dao.impl;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import org.apache.log4j.Logger;

import br.com.salao.ejb.dao.ServicosFuncionarioDao;
import br.com.salao.entity.FuncionarioServicos;

public class ServicosFuncionarioDaoImpl implements ServicosFuncionarioDao {

	private Logger logger = Logger.getLogger(ServicosFuncionarioDaoImpl.class.getName());
	private EntityManager em;
	private final GenericDao<FuncionarioServicos> dao;

	public ServicosFuncionarioDaoImpl(EntityManager em){
		this.em = em;
		dao = new GenericDao<FuncionarioServicos>(em, FuncionarioServicos.class);
	}

	public FuncionarioServicos incluir(FuncionarioServicos funcionarioServicos){
		return dao.salvar(funcionarioServicos);
	}

	@SuppressWarnings("unchecked")
	public List<FuncionarioServicos> buscarServicoPorIdEstabelecimentoEIdFuncionarioEIdServico(int idEstabelecimento, int idFuncionario, int IdServico){

		List<FuncionarioServicos> funcionarioServicos = null;

		logger.debug(":: buscarServicoPorIdEstabelecimentoEIdFuncionarioEIdServico :: Id Estabelecimento: " + idEstabelecimento + "Id funcionario: " + idFuncionario + "Od servico: " + IdServico);

		try {		
			Query query = em.createQuery("from FuncionarioServicos s where " +
					"s.estabelecimento.id = :idEstabelecimento " +
					"and s.funcionario.id = :idFuncionario " +
			"and s.servico.id = :idServico");
			query.setParameter("idEstabelecimento", idEstabelecimento);
			query.setParameter("idFuncionario", idFuncionario);
			query.setParameter("idServico", IdServico);
			funcionarioServicos = (List<FuncionarioServicos>) query.getResultList();	

		} catch (Exception e) {			
			e.printStackTrace();
			logger.error(":: buscarServicoPorIdEstabelecimentoEIdFuncionarioEIdServico :: " + e.getMessage());
			logger.error(e.getCause());
			funcionarioServicos = null;

		} 
		return funcionarioServicos;			
	}	

	@SuppressWarnings("unchecked")
	public List<FuncionarioServicos> buscarServicoPorIdEstabelecimentoEIdFuncionario(int idEstabelecimento, int idFuncionario){

		List<FuncionarioServicos> funcionarioServicos = null;

		try {		
			Query query = em.createQuery("from FuncionarioServicos s where s.estabelecimento.id like :idEstabelecimento and s.funcionario.id like :idFuncionario");
			query.setParameter("idEstabelecimento", idEstabelecimento);
			query.setParameter("idFuncionario", idFuncionario);
			funcionarioServicos = (List<FuncionarioServicos>) query.getResultList();	

		} catch (Exception e) {

			logger.error(":: buscarServicoPorIdEstabelecimentoEIdFuncionario :: " + e.getMessage());
			logger.error(e.getCause());
			e.printStackTrace();
			funcionarioServicos = null;

		} 
		return funcionarioServicos;			
	}


	@SuppressWarnings("unchecked")
	public List<FuncionarioServicos> buscarServicoFuncionarioPorIdEstabelecimento(int idEstabelecimento){

		List<FuncionarioServicos> funcionarioServicos = null;

		try {		
			Query query = em.createQuery("from FuncionarioServicos s where s.estabelecimento.id like :idEstabelecimento");
			query.setParameter("idEstabelecimento", idEstabelecimento);
			funcionarioServicos = (List<FuncionarioServicos>) query.getResultList();	

		} catch (Exception e) {

			logger.error(":: buscarServicoFuncionarioPorIdEstabelecimento :: " + e.getMessage());
			logger.error(e.getCause());

			e.printStackTrace();

			funcionarioServicos = null;

		} 
		return funcionarioServicos;			
	}
}